home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
misc
/
math
/
MathFX_src.lha
/
fxlclp.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-12-20
|
2KB
|
68 lines
/* Draws a (x1,y1) to (x2,y2) within the clip limits */
#include "mathfx.h"
#define betw(ix,ia,ib) ((ix<=ia && ix>=ib) || (ix>=ia && ix<=ib))
#define inside(ix,iy) (betw(ix,clpxmi,clpxma) && betw(iy,clpymi,clpyma))
#define ixcut(iy) round((float)((x2-x1)*(iy-y1)+x1*(y2-y1))/(float)(y2-y1))
#define iycut(ix) round((float)((y2-y1)*(ix-x1)+y1*(x2-x1))/(float)(x2-x1))
void fxlclp(x1,y1,x2,y2)
int x1,y1,x2,y2;
{
int xt[2],yt[2];
int it, k;
int clpxmi,clpxma,clpymi,clpyma;
gclp(&clpxmi,&clpxma,&clpymi,&clpyma);
k=0;
if (inside(x1,y1)) {
xt[k]=x1;
yt[k]=y1;
k=k+1;
}
if (inside(x2,y2)) {
xt[k]=x2;
yt[k]=y2;
k=k+1;
}
if (k == 2) goto draw;
if (y1 != y2) {
it=ixcut(clpymi);
if (inside(it,clpymi) && betw(clpymi,y1,y2)) {
xt[k]=it;
yt[k]=clpymi;
k=k+1;
}
if (k == 2) goto draw;
it=ixcut(clpyma);
if (inside(it,clpyma) && betw(clpyma,y1,y2)) {
xt[k]=it;
yt[k]=clpyma;
k=k+1;
}
if (k == 2) goto draw;
}
if (x1 != x2) {
it=iycut(clpxmi);
if (inside(clpxmi,it) && betw(clpxmi,x1,x2)) {
xt[k]=clpxmi;
yt[k]=it;
k=k+1;
}
if (k == 2) goto draw;
it=iycut(clpxma);
if (inside(clpxma,it) && betw(clpxma,x1,x2)) {
xt[k]=clpxma;
yt[k]=it;
k=k+1;
}
if (k == 2) goto draw;
}
draw:
if (k == 2) genlin(xt[0],yt[0],xt[1],yt[1]);
scurr(x2,y2);
}